rpm包spec文件的编写

学习了rpm包编写spec文件过程,并记录如下。

步骤简述

  • 安装rpmbuild
  • 创建rpm build env
  • 编写打包所需的spec文件
  • 执行rpm打包

下面用一个最简单的 demo 为例,说明下打包过程(下面是在centOS 7 上进行的测试)。

安装 rpmbuild

# 安装
yum install rpm-build    
# 验证安装是否成功
rpmbuild --version

创建rpm build env

# 创建目录结构
mkdir -p ~/rpmbuild/{RPMS,SRPMS,BUILD,SOURCES,SPECS,tmp}

cat <<EOF >~/.rpmmacros
%_topdir   %(echo $HOME)/rpmbuild
%_tmppath  %{_topdir}/tmp
EOF

cd ~/rpmbuild

编写打包所需的spec文件

创建一个spec文件

cd ~/rpmbuild/SPECS
touch hello_world.spec

使用编辑器打开(如vim)

Name:           hello_world
Version:        1.0
Release:        1
Summary:        Short description (first char has to be uppercase)

License:        GPL
URL:            www. your_website/

#BuildRequires:  package_required >= (or ==, or <=) 1.0.3 (for example)

%description
Description with almost 79 characters (first char has to be uppercase)

#This is a comment (just as example)

%files
/usr/local/hello_world.conf

#%changelog
#* date Packager's Name <packager's_email> version-revision
#- Summary of changes

其中注释掉的部分是可选的,更详细的内容参考:fedora rpm 打包文档

编辑完成后,看到 rpm 打包过程需要一个/usr/local/hello_world.conf的文件,该文件需要放到~/rpmbuild/BUILDROOT/hello_world-1.0-1/ 下面,所以创建目录~/rpmbuild/BUILDROOT/hello_world-1.0-1.x86_64/usr/local/并将文件hello_world.conf放到该目录下

执行打包

rpmbuild -bb ~/rpmbuild/SPECS/package_name.spec

-bb 的意思是只打 binary 而不打 source。执行成功后 rpm 包会在 ~/rpmbuild/RPMS/x86_64/下面。

FAQ

  • rpm 打包环境可以并发打包么
  • 如何控制安装后文件权限
  • 如何在安装之前/之后做一些特殊操作
  • rpm卸载如何完成配置文件清理